use of org.develnext.jphp.core.tokenizer.token.Token in project jphp by jphp-compiler.
the class FunctionGenerator method processArguments.
protected void processArguments(FunctionStmtToken result, ListIterator<Token> iterator) {
checkUnexpectedEnd(iterator);
List<ArgumentStmtToken> arguments = new ArrayList<ArgumentStmtToken>();
while (iterator.hasNext()) {
ArgumentStmtToken argument = processArgument(iterator);
if (argument == null)
break;
arguments.add(argument);
}
result.setArguments(arguments);
Token token = nextTokenAndPrev(iterator);
if (token instanceof ColonToken) {
nextToken(iterator);
Token next = nextToken(iterator);
if (next instanceof ValueIfElseToken) {
result.setReturnOptional(true);
next = nextToken(iterator);
}
HintType hintType;
NameToken hintTypeClass = null;
if (next instanceof SelfExprToken) {
if (analyzer.getClazz() == null) {
result.setReturnHintType(HintType.SELF);
} else {
if (analyzer.getClazz().isTrait()) {
result.setReturnHintType(HintType.SELF);
} else {
result.setReturnHintTypeClass(new FulledNameToken(next.getMeta(), new ArrayList<Token>() {
{
if (analyzer.getClazz().getNamespace().getName() != null) {
addAll(analyzer.getClazz().getNamespace().getName().getNames());
}
add(analyzer.getClazz().getName());
}
}));
}
}
} else if (next instanceof NameToken) {
String word = ((NameToken) next).getName().toLowerCase();
if (scalarTypeHints.contains(word)) {
hintType = HintType.of(word);
} else {
hintType = jphp_scalarTypeHints.contains(word) ? null : HintType.of(word);
if (hintType == null) {
hintTypeClass = analyzer.getRealName((NameToken) next);
}
}
result.setReturnHintType(hintType);
result.setReturnHintTypeClass(hintTypeClass);
} else {
unexpectedToken(next, "name");
}
}
}
use of org.develnext.jphp.core.tokenizer.token.Token in project jphp by jphp-compiler.
the class TokenizerTest method testMagicString.
@Test
public void testMagicString() throws IOException {
Token token;
Tokenizer tokenizer = new Tokenizer(new Context("\"\\.{$foo}\""));
token = tokenizer.nextToken();
assertTrue(token instanceof StringExprToken);
assertEquals("\\.{$foo}", ((StringExprToken) token).getValue());
assertEquals(1, ((StringExprToken) token).getSegments().size());
StringExprToken.Segment segment = ((StringExprToken) token).getSegments().get(0);
assertEquals(2, segment.from);
assertEquals(8, segment.to);
}
use of org.develnext.jphp.core.tokenizer.token.Token in project jphp by jphp-compiler.
the class TokenizerTest method testEscapeBug307.
@Test
public void testEscapeBug307() throws IOException {
Token token;
Tokenizer tokenizer = new Tokenizer(new Context("\"Ymd\\THis\\Z\""));
token = tokenizer.nextToken();
assertTrue(token instanceof StringExprToken);
assertEquals("Ymd\\THis\\Z", ((StringExprToken) token).getValue());
}
use of org.develnext.jphp.core.tokenizer.token.Token in project jphp by jphp-compiler.
the class TokenizerTest method testStringSlashes.
@Test
public void testStringSlashes() throws IOException {
Token token;
Tokenizer tokenizer = new Tokenizer(new Context(" 'foo\\'bar' \"foo\\\"bar\""));
token = tokenizer.nextToken();
assertTrue(token instanceof StringExprToken);
assertEquals("foo'bar", ((StringExprToken) token).getValue());
token = tokenizer.nextToken();
assertTrue(token instanceof StringExprToken);
assertEquals("foo\"bar", ((StringExprToken) token).getValue());
}
use of org.develnext.jphp.core.tokenizer.token.Token in project jphp by jphp-compiler.
the class TokenizerAssert method nextIsStringToken.
public TokenizerAssert nextIsStringToken(String expectedValue) {
Token actual = this.actual.nextToken();
isStringTokenWithValue(expectedValue, actual);
return this;
}
Aggregations