24#include "AstScript/ScriptParser.hpp"
25#include "AstScript/ExprVisitor.hpp"
26#include "AstUtil/StringView.hpp"
36#define AST_EXPR(CLASS) \
38 void accept(ExprVisitor& visitor) override{visitor.visit(*this);};
128AST_SCRIPT_API Variable* aNewVariable(StringView name, Expr* expr=
nullptr,
bool bind =
false);
129AST_SCRIPT_API Variable* aNewVariable(Expr* expr=
nullptr,
bool bind =
false);
135AST_SCRIPT_API Symbol* aNewSymbol(StringView name);
143AST_SCRIPT_CAPI Expr* aNewOpAssign(EOpAssignType op, Expr* left, Expr* right);
152AST_SCRIPT_CAPI Expr* aNewOpBin(EOpBinType op, Expr* left, Expr* right);
159AST_SCRIPT_CAPI Expr* aNewOpUnary(EOpUnaryType op, Expr* expr);
167AST_SCRIPT_CAPI Expr* aNewExprCondition(Expr* condition, Expr* thenExpr, Expr* elseExpr=
nullptr);
176AST_SCRIPT_CAPI Expr* aNewExprRange(Expr* start, Expr* stop, Expr* step=
nullptr);
181AST_SCRIPT_CAPI Value* aNewValueString(StringView value);
185AST_SCRIPT_CAPI Value* aNewValueInt(
int value);
189AST_SCRIPT_CAPI Value* aNewValueBool(
bool value);
193AST_SCRIPT_CAPI Value* aNewValueDouble(
double value);
200AST_SCRIPT_CAPI Value* aNewValueQuantity(
const Quantity& value);
203AST_SCRIPT_CAPI Value* aValueNull();
208AST_SCRIPT_CAPI Expr* aParseExpr(StringView script);
215AST_SCRIPT_CAPI Value* aEval(StringView script);
221AST_SCRIPT_CAPI Value* aEvalExpr(Expr* expr);
227AST_SCRIPT_CAPI
bool aValueIsBool(Value* value);
232AST_SCRIPT_CAPI
bool aValueIsDouble(Value* value);
237AST_SCRIPT_CAPI
bool aValueIsInt(Value* value);
243AST_SCRIPT_CAPI
bool aValueIsArithmetic(Value* value);
249AST_SCRIPT_CAPI
bool aValueIsQuantity(Value* value);
255AST_SCRIPT_CAPI
double aValueToDouble(Value* value);
260AST_SCRIPT_CAPI
bool aValueUnboxBool(Value* value);
266AST_SCRIPT_CAPI
double aValueUnboxDouble(Value* value);
272AST_SCRIPT_CAPI
int aValueUnboxInt(Value* value);
278AST_SCRIPT_API Quantity aValueUnboxQuantity(Value* value);
283AST_SCRIPT_API std::string aFormatExpr(Expr* expr, Object* context=
nullptr);
373A_ALWAYS_INLINE
Value* aNewValue(
int value)
378A_ALWAYS_INLINE Value* aNewValue(
double value)
380 return aNewValueDouble(value);
383A_ALWAYS_INLINE Value* aNewValue(
bool value)
388A_ALWAYS_INLINE Value* aNewValue(
const Quantity& value)
393A_ALWAYS_INLINE Value* aNewValue(StringView value)
EOpAssignType
定义 ScriptAPI.hpp:79
Value * aNewValueBool(bool value)
创建布尔值对象
定义 ScriptAPI.cpp:92
Value * aDoOpAssign(EOpAssignType op, Expr *left, Expr *right)
执行赋值运算符
定义 ScriptAPI.cpp:282
Value *(* OpBinFunc)(Value *left, Value *right)
二元运算函数指针类型
定义 ScriptAPI.hpp:287
Value * aNewValueInt(int value)
创建整数值对象
定义 ScriptAPI.cpp:88
Value *(* OpAssignFunc)(Expr *left, Expr *right)
赋值运算函数指针类型
定义 ScriptAPI.hpp:290
EOpUnaryType
定义 ScriptAPI.hpp:102
EOpBinType
定义 ScriptAPI.hpp:40
Value * aIterateBegin(Value *container, int &index)
执行迭代器的开始元素
定义 ScriptAPI.cpp:353
Value * aIterateNext(Value *container, int &index)
执行迭代器的下一个元素
定义 ScriptAPI.cpp:358
Value * aDoOpUnary(EOpUnaryType op, Value *value)
执行一元运算符
定义 ScriptAPI.cpp:231
Value * aNewValueQuantity(const Quantity &value)
创建数量值对象
定义 ScriptAPI.cpp:101
Value * aNewValueString(StringView value)
创建字符串值对象
定义 ScriptAPI.cpp:84
Value * aDoOpBin(EOpBinType op, Value *left, Value *right)
执行二元运算符
定义 ScriptAPI.cpp:348
Value *(* IterateFunc)(Value *value, int &index)
迭代函数指针类型
定义 ScriptAPI.hpp:299
Value *(* OpUnaryFunc)(Value *value)
一元运算函数指针类型
定义 ScriptAPI.hpp:293
OpUnaryFunc aGetOpUnaryFunc(EOpUnaryType op, Class *type)
获取一元运算函数指针
定义 ScriptAPI.cpp:337
IterateFunc aGetIterateFunc(Class *type)
获取迭代函数指针
定义 ScriptAPI.cpp:342
@ eElemMulAssign
按元素乘赋值
定义 ScriptAPI.hpp:91
@ eAssign
赋值 =
定义 ScriptAPI.hpp:80
@ eDivAssign
除法赋值
定义 ScriptAPI.hpp:87
@ eDelayAssign
延迟赋值 :=
定义 ScriptAPI.hpp:81
@ eElemOrAssign
按元素或赋值
定义 ScriptAPI.hpp:96
@ eAddAssign
加法赋值
定义 ScriptAPI.hpp:84
@ eMulAssign
乘法赋值
定义 ScriptAPI.hpp:86
@ eElemDivAssign
按元素除赋值
定义 ScriptAPI.hpp:92
@ ePowAssign
乘方赋值
定义 ScriptAPI.hpp:89
@ eElemAndAssign
按元素与赋值
定义 ScriptAPI.hpp:95
@ numOpAssignType
运算符类型数量
定义 ScriptAPI.hpp:98
@ eElemModAssign
按元素取模赋值
定义 ScriptAPI.hpp:93
@ eSubAssign
减法赋值
定义 ScriptAPI.hpp:85
@ eElemPowAssign
按元素乘方赋值
定义 ScriptAPI.hpp:94
@ eBindAssign
绑定赋值 =&
定义 ScriptAPI.hpp:82
@ eModAssign
取模赋值
定义 ScriptAPI.hpp:88
@ eNeg
负号
定义 ScriptAPI.hpp:104
@ eDec
自减
定义 ScriptAPI.hpp:106
@ eInc
自增
定义 ScriptAPI.hpp:105
@ eNot
逻辑非
定义 ScriptAPI.hpp:103
@ eIterate
迭代器
定义 ScriptAPI.hpp:111
@ eBitNot
按位取反
定义 ScriptAPI.hpp:107
@ numOpUnaryType
运算符类型数量
定义 ScriptAPI.hpp:108
@ eNe
不等于
定义 ScriptAPI.hpp:69
@ eElemPow
按元素乘方
定义 ScriptAPI.hpp:59
@ eElemOr
按元素或
定义 ScriptAPI.hpp:62
@ eGt
大于
定义 ScriptAPI.hpp:67
@ invalidOpBin
无效运算符
定义 ScriptAPI.hpp:72
@ eMul
乘法
定义 ScriptAPI.hpp:43
@ eBitAnd
位与
定义 ScriptAPI.hpp:51
@ eCatHorizontal
水平拼接
定义 ScriptAPI.hpp:76
@ eElemMul
按元素乘
定义 ScriptAPI.hpp:57
@ eLt
小于
定义 ScriptAPI.hpp:64
@ eElemAnd
按元素与
定义 ScriptAPI.hpp:61
@ eBitRightShift
定义 ScriptAPI.hpp:54
@ eBitLeftShift
<< (逻辑/算术左移)
定义 ScriptAPI.hpp:53
@ eAnd
逻辑与
定义 ScriptAPI.hpp:48
@ eBitURightShift
定义 ScriptAPI.hpp:55
@ eGe
大于等于
定义 ScriptAPI.hpp:68
@ eElemDiv
按元素除
定义 ScriptAPI.hpp:58
@ eLe
小于等于
定义 ScriptAPI.hpp:65
@ eCatVertical
垂直拼接
定义 ScriptAPI.hpp:75
@ eBitXor
位异或
定义 ScriptAPI.hpp:52
@ eMod
取模
定义 ScriptAPI.hpp:46
@ eDiv
除法
定义 ScriptAPI.hpp:44
@ ePow
乘方
定义 ScriptAPI.hpp:45
@ eSub
减法
定义 ScriptAPI.hpp:42
@ eBitOr
位或
定义 ScriptAPI.hpp:50
@ eElemMod
按元素取模
定义 ScriptAPI.hpp:60
@ eAdd
加法
定义 ScriptAPI.hpp:41
@ numOpBinType
运算符类型数量
定义 ScriptAPI.hpp:71
@ eEq
等于
定义 ScriptAPI.hpp:66
@ eOr
逻辑或
定义 ScriptAPI.hpp:49