24#include "AstScript/ExprVisitor.hpp"
25#include "AstUtil/StringView.hpp"
35#define AST_EXPR_EXTRA(CLASS) \
36 void accept(ExprVisitor& visitor) override{visitor.visit(*this);};
39#define AST_EXPR(CLASS) \
131AST_SCRIPT_API Variable* aNewVariable(StringView name, Expr* expr=
nullptr,
bool bind =
false);
132AST_SCRIPT_API Variable* aNewVariable(Expr* expr=
nullptr,
bool bind =
false);
138AST_SCRIPT_API Symbol* aNewSymbol(StringView name);
146AST_SCRIPT_CAPI Expr* aNewOpAssign(EOpAssignType op, Expr* left, Expr* right);
155AST_SCRIPT_CAPI Expr* aNewOpBin(EOpBinType op, Expr* left, Expr* right);
162AST_SCRIPT_CAPI Expr* aNewOpUnary(EOpUnaryType op, Expr* expr);
170AST_SCRIPT_CAPI Expr* aNewExprCondition(Expr* condition, Expr* thenExpr, Expr* elseExpr=
nullptr);
179AST_SCRIPT_CAPI Expr* aNewExprRange(Expr* start, Expr* stop, Expr* step=
nullptr);
184AST_SCRIPT_CAPI Value* aNewValueString(StringView value);
188AST_SCRIPT_CAPI Value* aNewValueInt(
int value);
192AST_SCRIPT_CAPI Value* aNewValueBool(
bool value);
196AST_SCRIPT_CAPI Value* aNewValueDouble(
double value);
201AST_SCRIPT_API Value* aNewValueDict();
208AST_SCRIPT_CAPI Value* aNewValueQuantity(
const Quantity& value);
211AST_SCRIPT_CAPI Value* aValueNull();
216AST_SCRIPT_CAPI Expr* aParseExpr(StringView script);
223AST_SCRIPT_CAPI Value* aEval(StringView script);
229AST_SCRIPT_CAPI Value* aEvalExpr(Expr* expr);
235AST_SCRIPT_CAPI
bool aValueIsBool(Value* value);
240AST_SCRIPT_CAPI
bool aValueIsDouble(Value* value);
245AST_SCRIPT_CAPI
bool aValueIsInt(Value* value);
251AST_SCRIPT_CAPI
bool aValueIsArithmetic(Value* value);
256AST_SCRIPT_CAPI
bool aValueIsString(Value* value);
261AST_SCRIPT_CAPI
bool aValueIsQuantity(Value* value);
267AST_SCRIPT_CAPI
double aValueToDouble(Value* value);
272AST_SCRIPT_CAPI
bool aValueUnboxBool(Value* value);
278AST_SCRIPT_CAPI
double aValueUnboxDouble(Value* value);
284AST_SCRIPT_CAPI
int aValueUnboxInt(Value* value);
290AST_SCRIPT_API Quantity aValueUnboxQuantity(Value* value);
295AST_SCRIPT_API std::string aFormatExpr(Expr* expr, Object* context=
nullptr);
387A_ALWAYS_INLINE
Value* aNewValue(
int value)
392A_ALWAYS_INLINE Value* aNewValue(
double value)
394 return aNewValueDouble(value);
397A_ALWAYS_INLINE Value* aNewValue(
bool value)
402A_ALWAYS_INLINE Value* aNewValue(
const Quantity& value)
407A_ALWAYS_INLINE Value* aNewValue(StringView value)
412A_ALWAYS_INLINE Value* aNewValue(
const std::string& value)
417A_ALWAYS_INLINE Value* aNewValue(
const char* value)
425Value* aNewValue(T) =
delete;
EOpAssignType
定义 ScriptAPI.hpp:82
Value * aNewValueBool(bool value)
创建布尔值对象
定义 ScriptAPI.cpp:93
Value * aDoOpAssign(EOpAssignType op, Expr *left, Expr *right)
执行赋值运算符
定义 ScriptAPI.cpp:284
Value *(* OpBinFunc)(Value *left, Value *right)
二元运算函数指针类型
定义 ScriptAPI.hpp:299
Value * aNewValueInt(int value)
创建整数值对象
定义 ScriptAPI.cpp:89
Value *(* OpAssignFunc)(Expr *left, Expr *right)
赋值运算函数指针类型
定义 ScriptAPI.hpp:302
EOpUnaryType
定义 ScriptAPI.hpp:105
EOpBinType
定义 ScriptAPI.hpp:43
Value * aIterateBegin(Value *container, int &index)
执行迭代器的开始元素
定义 ScriptAPI.cpp:355
Value * aIterateNext(Value *container, int &index)
执行迭代器的下一个元素
定义 ScriptAPI.cpp:360
Value * aDoOpUnary(EOpUnaryType op, Value *value)
执行一元运算符
定义 ScriptAPI.cpp:233
Value * aNewValueQuantity(const Quantity &value)
创建数量值对象
定义 ScriptAPI.cpp:107
Value * aNewValueString(StringView value)
创建字符串值对象
定义 ScriptAPI.cpp:85
Value * aDoOpBin(EOpBinType op, Value *left, Value *right)
执行二元运算符
定义 ScriptAPI.cpp:350
Value *(* IterateFunc)(Value *value, int &index)
迭代函数指针类型
定义 ScriptAPI.hpp:311
Value *(* OpUnaryFunc)(Value *value)
一元运算函数指针类型
定义 ScriptAPI.hpp:305
OpUnaryFunc aGetOpUnaryFunc(EOpUnaryType op, Class *type)
获取一元运算函数指针
定义 ScriptAPI.cpp:339
IterateFunc aGetIterateFunc(Class *type)
获取迭代函数指针
定义 ScriptAPI.cpp:344
@ eElemMulAssign
按元素乘赋值
定义 ScriptAPI.hpp:94
@ eAssign
赋值 =
定义 ScriptAPI.hpp:83
@ eDivAssign
除法赋值
定义 ScriptAPI.hpp:90
@ eDelayAssign
延迟赋值 :=
定义 ScriptAPI.hpp:84
@ eElemOrAssign
按元素或赋值
定义 ScriptAPI.hpp:99
@ eAddAssign
加法赋值
定义 ScriptAPI.hpp:87
@ eMulAssign
乘法赋值
定义 ScriptAPI.hpp:89
@ eElemDivAssign
按元素除赋值
定义 ScriptAPI.hpp:95
@ ePowAssign
乘方赋值
定义 ScriptAPI.hpp:92
@ eElemAndAssign
按元素与赋值
定义 ScriptAPI.hpp:98
@ numOpAssignType
运算符类型数量
定义 ScriptAPI.hpp:101
@ eElemModAssign
按元素取模赋值
定义 ScriptAPI.hpp:96
@ eSubAssign
减法赋值
定义 ScriptAPI.hpp:88
@ eElemPowAssign
按元素乘方赋值
定义 ScriptAPI.hpp:97
@ eBindAssign
绑定赋值 =&
定义 ScriptAPI.hpp:85
@ eModAssign
取模赋值
定义 ScriptAPI.hpp:91
@ eNeg
负号
定义 ScriptAPI.hpp:107
@ eDec
自减
定义 ScriptAPI.hpp:109
@ eInc
自增
定义 ScriptAPI.hpp:108
@ eNot
逻辑非
定义 ScriptAPI.hpp:106
@ eIterate
迭代器
定义 ScriptAPI.hpp:114
@ eBitNot
按位取反
定义 ScriptAPI.hpp:110
@ numOpUnaryType
运算符类型数量
定义 ScriptAPI.hpp:111
@ eNe
不等于
定义 ScriptAPI.hpp:72
@ eElemPow
按元素乘方
定义 ScriptAPI.hpp:62
@ eElemOr
按元素或
定义 ScriptAPI.hpp:65
@ eGt
大于
定义 ScriptAPI.hpp:70
@ invalidOpBin
无效运算符
定义 ScriptAPI.hpp:75
@ eMul
乘法
定义 ScriptAPI.hpp:46
@ eBitAnd
位与
定义 ScriptAPI.hpp:54
@ eCatHorizontal
水平拼接
定义 ScriptAPI.hpp:79
@ eElemMul
按元素乘
定义 ScriptAPI.hpp:60
@ eLt
小于
定义 ScriptAPI.hpp:67
@ eElemAnd
按元素与
定义 ScriptAPI.hpp:64
@ eBitRightShift
定义 ScriptAPI.hpp:57
@ eBitLeftShift
<< (逻辑/算术左移)
定义 ScriptAPI.hpp:56
@ eAnd
逻辑与
定义 ScriptAPI.hpp:51
@ eBitURightShift
定义 ScriptAPI.hpp:58
@ eGe
大于等于
定义 ScriptAPI.hpp:71
@ eElemDiv
按元素除
定义 ScriptAPI.hpp:61
@ eLe
小于等于
定义 ScriptAPI.hpp:68
@ eCatVertical
垂直拼接
定义 ScriptAPI.hpp:78
@ eBitXor
位异或
定义 ScriptAPI.hpp:55
@ eMod
取模
定义 ScriptAPI.hpp:49
@ eDiv
除法
定义 ScriptAPI.hpp:47
@ ePow
乘方
定义 ScriptAPI.hpp:48
@ eSub
减法
定义 ScriptAPI.hpp:45
@ eBitOr
位或
定义 ScriptAPI.hpp:53
@ eElemMod
按元素取模
定义 ScriptAPI.hpp:63
@ eAdd
加法
定义 ScriptAPI.hpp:44
@ numOpBinType
运算符类型数量
定义 ScriptAPI.hpp:74
@ eEq
等于
定义 ScriptAPI.hpp:69
@ eOr
逻辑或
定义 ScriptAPI.hpp:52