static void readAndEmitTag (const unsigned char** cp, rubyKind expected_kind) { if (isspace (**cp)) { vString *name = vStringNew (); vString *chunk = vStringNew (); rubyKind actual_kind; unsigned int i = 0; /* parse the identifier, allowing scoping like "class Foo::Bar::Baz" */ while (1) { actual_kind = parseIdentifier (cp, chunk, expected_kind); if (i++ > 0) vStringPut (name, '.'); vStringCat (name, chunk); vStringClear (chunk); if (actual_kind != K_UNDEFINED && (*cp)[0] == ':' && (*cp)[1] == ':') *cp += 2; else break; } vStringDelete (chunk); vStringTerminate (name); if (actual_kind == K_UNDEFINED || vStringLength (name) == 0) { /* * What kind of tags should we create for code like this? * * %w(self.clfloor clfloor).each do |name| * module_eval <<-"end;" * def #{name}(x, y=1) * q, r = x.divmod(y) * q = q.to_i * return q, r * end * end; * end * * Or this? * * class << HTTP * * For now, we don't create any. */ } else { emitRubyTag (name, actual_kind); } vStringDelete (name); } }
static void readAndEmitTag (const unsigned char** cp, rubyKind expected_kind) { if (isspace (**cp)) { vString *name = vStringNew (); rubyKind actual_kind = parseIdentifier (cp, name, expected_kind); if (actual_kind == K_UNDEFINED || vStringLength (name) == 0) { /* * What kind of tags should we create for code like this? * * %w(self.clfloor clfloor).each do |name| * module_eval <<-"end;" * def #{name}(x, y=1) * q, r = x.divmod(y) * q = q.to_i * return q, r * end * end; * end * * Or this? * * class << HTTP * * For now, we don't create any. */ enterUnnamedScope (); } else { emitRubyTag (name, actual_kind); } vStringDelete (name); } }