diff options
author | Android (Google) Code Review <android-gerrit@google.com> | 2009-06-10 17:10:29 +0200 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2009-06-10 17:10:29 +0200 |
commit | 9b9c2114bd7d02200ce43cb9ec513473079dfad9 (patch) | |
tree | 862fc4cae41e95727a2df0db36c65faaba3de900 /edify/expr.h | |
parent | allow OTA package to provide binary instead of script (diff) | |
parent | core of edify, an eventual replacement for amend (diff) | |
download | android_bootable_recovery-9b9c2114bd7d02200ce43cb9ec513473079dfad9.tar android_bootable_recovery-9b9c2114bd7d02200ce43cb9ec513473079dfad9.tar.gz android_bootable_recovery-9b9c2114bd7d02200ce43cb9ec513473079dfad9.tar.bz2 android_bootable_recovery-9b9c2114bd7d02200ce43cb9ec513473079dfad9.tar.lz android_bootable_recovery-9b9c2114bd7d02200ce43cb9ec513473079dfad9.tar.xz android_bootable_recovery-9b9c2114bd7d02200ce43cb9ec513473079dfad9.tar.zst android_bootable_recovery-9b9c2114bd7d02200ce43cb9ec513473079dfad9.zip |
Diffstat (limited to '')
-rw-r--r-- | edify/expr.h | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/edify/expr.h b/edify/expr.h new file mode 100644 index 000000000..ac5df1869 --- /dev/null +++ b/edify/expr.h @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _EXPRESSION_H +#define _EXPRESSION_H + +#define MAX_STRING_LEN 1024 + +typedef struct Expr Expr; + +typedef char* (*Function)(const char* name, void* cookie, + int argc, Expr* argv[]); + +struct Expr { + Function fn; + char* name; + int argc; + Expr** argv; +}; + +char* Evaluate(void* cookie, Expr* expr); + +// Glue to make an Expr out of a literal. +char* Literal(const char* name, void* cookie, int argc, Expr* argv[]); + +// Functions corresponding to various syntactic sugar operators. +// ("concat" is also available as a builtin function, to concatenate +// more than two strings.) +char* ConcatFn(const char* name, void* cookie, int argc, Expr* argv[]); +char* LogicalAndFn(const char* name, void* cookie, int argc, Expr* argv[]); +char* LogicalOrFn(const char* name, void* cookie, int argc, Expr* argv[]); +char* LogicalNotFn(const char* name, void* cookie, int argc, Expr* argv[]); +char* SubstringFn(const char* name, void* cookie, int argc, Expr* argv[]); +char* EqualityFn(const char* name, void* cookie, int argc, Expr* argv[]); +char* InequalityFn(const char* name, void* cookie, int argc, Expr* argv[]); +char* SequenceFn(const char* name, void* cookie, int argc, Expr* argv[]); + +// Convenience function for building expressions with a fixed number +// of arguments. +Expr* Build(Function fn, int count, ...); + +// Global builtins, registered by RegisterBuiltins(). +char* IfElseFn(const char* name, void* cookie, int argc, Expr* argv[]); +char* AssertFn(const char* name, void* cookie, int argc, Expr* argv[]); +char* AbortFn(const char* name, void* cookie, int argc, Expr* argv[]); + +typedef struct { + const char* name; + Function fn; +} NamedFunction; + +// Register a new function. The same Function may be registered under +// multiple names, but a given name should only be used once. +void RegisterFunction(const char* name, Function fn); + +// Register all the builtins. +void RegisterBuiltins(); + +// Call this after all calls to RegisterFunction() but before parsing +// any scripts to finish building the function table. +void FinishRegistration(); + +// Find the Function for a given name; return NULL if no such function +// exists. +Function FindFunction(const char* name); + +#endif // _EXPRESSION_H |