本文整理汇总了C++中BaseNode::settable方法的典型用法代码示例。如果您正苦于以下问题:C++ BaseNode::settable方法的具体用法?C++ BaseNode::settable怎么用?C++ BaseNode::settable使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类BaseNode
的用法示例。
在下文中一共展示了BaseNode::settable方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: parse_import
BaseNode* parse_import(ParseContext& pc) {
if (pc.getTokens().size() < 2)
return NULL;
if (!pc.toke_is(LexToken::IMPORT))
return NULL;
pc.nextToken();
if (!pc.toke_is(LexToken::IDENTIFIER)) {
parse_err(pc, "Improper import, requires module name.");
return NULL;
}
DexRef mname = create_string("", 0, 32);
DexRef names[MODULE_MEMB_MAX];
DexRef varname;
int i = 0;
bool has_as = false;
while (true) {
varname = pc.getToken().data;
names[i] = varname;
str_concat(mname, names[i]);
i++;
pc.nextToken();
if (pc.isLineEnd())
break;
if (pc.toke_is(LexToken::AS)) {
has_as = true;
break;
}
if (!pc.toke_is(LexToken::MEMBER))
parse_err(pc, "Improper import, requires module name.");
strc_concat(mname, ".", 1);
}
BaseNode* targ = NULL;
if (has_as) {
pc.nextToken();
if (pc.isLineEnd()) {
parse_err(pc, "Improper use of 'import ... as'.");
} else {
targ = parse_value(pc, true);
if (!pc.isLineEnd() || !targ->settable()) {
parse_err(pc,
"Improper use of 'import ... as', requires settable expression.");
}
}
} else {
VarNode* vn = new VarNode(varname);
vn->glob = pc.func == NULL;
targ = vn;
}
//cout << mname << endl;
//cout << varname << endl;
if (error()){
delete targ;
return NULL;
}
DexRef fname = path_from_strs(names, i);
pc.nextLine();
return create_load_module(targ, mname, fname);
}