Add position metadata to desugaring
[hiphop-php.git] / hphp / hack / test / typecheck / expression_trees / splice_err1.php
blob3051bb4f3515f3be2133a35563d438fac924c6b1
1 <?hh
3 <<file:__EnableUnstableFeatures('expression_trees')>>
5 function foo(): void {
6 $x = 4;
8 // Spliced Expressions need to be ExprTrees
9 $y = Code`__splice__($x)`;
12 //// BEGIN DEFS
13 // Placeholder definition so we don't get naming/typing errors.
14 final class Code {
15 const type TAst = mixed;
16 // Simple literals.
17 public function intLiteral(?ExprPos $_, int $_): this::TAst {
18 throw new Exception();
20 public function boolLiteral(?ExprPos $_, bool $_): this::TAst {
21 throw new Exception();
23 public function stringLiteral(?ExprPos $_, string $_): this::TAst {
24 throw new Exception();
26 public function nullLiteral(?ExprPos $_): this::TAst {
27 throw new Exception();
29 public function localVar(?ExprPos $_, string $_): this::TAst {
30 throw new Exception();
32 public function lambdaLiteral(
33 ?ExprPos $_,
34 vec<string> $_args,
35 vec<this::TAst> $_body,
36 ): this::TAst {
37 throw new Exception();
40 // Operators
41 public function plus(
42 ?ExprPos $_,
43 this::TAst $_,
44 this::TAst $_,
45 ): this::TAst {
46 throw new Exception();
48 public function ampamp(
49 ?ExprPos $_,
50 this::TAst $_,
51 this::TAst $_,
52 ): this::TAst {
53 throw new Exception();
55 public function barbar(
56 ?ExprPos $_,
57 this::TAst $_,
58 this::TAst $_,
59 ): this::TAst {
60 throw new Exception();
62 public function exclamationMark(
63 ?ExprPos $_,
64 this::TAst $_,
65 ): this::TAst {
66 throw new Exception();
68 public function call(
69 ?ExprPos $_,
70 string $_fnName,
71 vec<this::TAst> $_args,
72 ): this::TAst {
73 throw new Exception();
76 public function assign(
77 ?ExprPos $_,
78 this::TAst $_,
79 this::TAst $_,
80 ): this::TAst {
81 throw new Exception();
84 // Statements.
85 public function ifStatement(
86 ?ExprPos $_,
87 this::TAst $_cond,
88 vec<this::TAst> $_then_body,
89 vec<this::TAst> $_else_body,
90 ): this::TAst {
91 throw new Exception();
93 public function whileStatement(
94 ?ExprPos $_,
95 this::TAst $_cond,
96 vec<this::TAst> $_body,
97 ): this::TAst {
98 throw new Exception();
100 public function returnStatement(
101 ?ExprPos $_,
102 ?this::TAst $_,
103 ): this::TAst {
104 throw new Exception();
106 public function forStatement(
107 ?ExprPos $_,
108 vec<this::TAst> $_,
109 this::TAst $_,
110 vec<this::TAst> $_,
111 vec<this::TAst> $_,
112 ): this::TAst {
113 throw new Exception();
115 public function breakStatement(?ExprPos $_): this::TAst {
116 throw new Exception();
118 public function continueStatement(?ExprPos $_,): this::TAst {
119 throw new Exception();
122 // Splice
123 public function splice<T>(
124 ?ExprPos $_,
125 ExprTree<this, this::TAst, T> $_,
126 ): this::TAst {
127 throw new Exception();
130 // TODO: Discard unsupported syntax nodes while lowering
131 public function unsupportedSyntax(string $msg): this::TAst {
132 throw new Exception($msg);
136 final class ExprTree<TVisitor, TResult, TInfer>{
137 public function __construct(
138 private ?ExprPos $pos,
139 private (function(TVisitor): TResult) $x,
140 private (function(): TInfer) $err,
141 ) {}
144 final class ExprPos {
145 public function __construct(
146 private int $begin_line,
147 private int $begin_col,
148 private int $end_line,
149 private int $end_col,
150 ) {}
152 //// END DEFS