static void push_node(lua_State *L, const GumboNode *node) { luaL_checkstack(L, 10, "Unable to allocate Lua stack space"); switch (node->type) { case GUMBO_NODE_ELEMENT: { const GumboElement *element = &node->v.element; lua_createtable(L, 0, 7); set_tag(L, element); set_sourcepos(L, element->start_pos); if (node->parse_flags != GUMBO_INSERTION_NORMAL) { set_integer(L, "parseFlags", node->parse_flags); } set_attributes(L, &element->attributes); set_children(L, &element->children, 1); setmetatable(L, Element); return; } case GUMBO_NODE_TEMPLATE: { const GumboElement *element = &node->v.element; lua_createtable(L, 0, 8); set_literal(L, "localName", "template"); set_sourcepos(L, element->start_pos); set_attributes(L, &element->attributes); lua_createtable(L, 0, 0); setmetatable(L, NodeList); lua_setfield(L, -2, "childNodes"); lua_createtable(L, 0, 1); set_children(L, &element->children, 1); setmetatable(L, DocumentFragment); lua_setfield(L, -2, "content"); setmetatable(L, Element); return; } case GUMBO_NODE_TEXT: create_text_node(L, &node->v.text, Text); return; case GUMBO_NODE_WHITESPACE: create_text_node(L, &node->v.text, Text); set_literal(L, "type", "whitespace"); return; case GUMBO_NODE_COMMENT: create_text_node(L, &node->v.text, Comment); return; case GUMBO_NODE_CDATA: create_text_node(L, &node->v.text, Text); set_literal(L, "type", "cdata"); return; default: luaL_error(L, "GumboNodeType value out of bounds: %d", node->type); return; } }
void DexInstruction::verify_encoding() const { auto test = m_count ? new DexInstruction(opcode()) : new DexInstruction(opcode(), 0); if (dests_size()) { test->set_dest(dest()); } for (unsigned i = 0; i < srcs_size(); i++) { test->set_src(i, src(i)); } if (has_range_base()) test->set_range_base(range_base()); if (has_range_size()) test->set_range_size(range_size()); if (has_arg_word_count()) test->set_arg_word_count(arg_word_count()); if (has_literal()) test->set_literal(literal()); if (has_offset()) test->set_offset(offset()); assert_log(m_opcode == test->m_opcode, "%x %x\n", m_opcode, test->m_opcode); for (unsigned i = 0; i < m_count; i++) { assert_log(m_arg[i] == test->m_arg[i], "(%x %x) (%x %x)", m_opcode, m_arg[i], test->m_opcode, test->m_arg[i]); } delete test; }
static void set_tag(lua_State *L, const GumboElement *element) { if (element->tag_namespace == GUMBO_NAMESPACE_SVG) { set_literal(L, "namespace", "svg"); GumboStringPiece original_tag = element->original_tag; gumbo_tag_from_original_text(&original_tag); const char *normalized = gumbo_normalize_svg_tagname(&original_tag); if (normalized) { set_string(L, "localName", normalized); return; } } else if (element->tag_namespace == GUMBO_NAMESPACE_MATHML) { set_literal(L, "namespace", "math"); } if (element->tag == GUMBO_TAG_UNKNOWN) { GumboStringPiece original_tag = element->original_tag; gumbo_tag_from_original_text(&original_tag); pushstring_lower(L, original_tag.data, original_tag.length); } else { lua_pushstring(L, gumbo_normalized_tagname(element->tag)); } lua_setfield(L, -2, "localName"); }
void set_name(Symbol* n) { set_literal(n); }
void set_klass(Klass* k) { set_literal(k); }