|
16 | 16 | from taichi.lang._ndrange import _Ndrange, ndrange |
17 | 17 | from taichi.lang.argpack import ArgPackType |
18 | 18 | from taichi.lang.ast.ast_transformer_utils import Builder, LoopStatus, ReturnStatus |
| 19 | +from taichi.lang.ast import hint |
19 | 20 | from taichi.lang.ast.symbol_resolver import ASTResolver |
20 | 21 | from taichi.lang.exception import ( |
21 | 22 | TaichiIndexError, |
@@ -105,18 +106,29 @@ def build_assign_annotated(ctx, target, value, is_static_assign, annotation): |
105 | 106 | f'Kernel argument "{target.id}" is immutable in the kernel. ' |
106 | 107 | f"If you want to change its value, please create a new variable." |
107 | 108 | ) |
108 | | - anno = impl.expr_init(annotation) |
109 | | - if is_static_assign: |
110 | | - raise TaichiSyntaxError("Static assign cannot be used on annotated assignment") |
111 | | - if is_local and not ctx.is_var_declared(target.id): |
112 | | - var = ti_ops.cast(value, anno) |
113 | | - var = impl.expr_init(var) |
| 109 | + if annotation is hint.new: |
| 110 | + var = impl.expr_init(value) |
114 | 111 | ctx.create_variable(target.id, var) |
| 112 | + elif annotation is hint.hide: |
| 113 | + var = impl.expr_init(value) |
| 114 | + ctx.hide_variable(target.id, var) |
115 | 115 | else: |
116 | | - var = build_stmt(ctx, target) |
117 | | - if var.ptr.get_rvalue_type() != anno: |
118 | | - raise TaichiSyntaxError("Static assign cannot have type overloading") |
119 | | - var._assign(value) |
| 116 | + anno = impl.expr_init(annotation) |
| 117 | + if is_static_assign: |
| 118 | + raise TaichiSyntaxError( |
| 119 | + "Static assign cannot be used on annotated assignment" |
| 120 | + ) |
| 121 | + if is_local and not ctx.is_var_declared(target.id): |
| 122 | + var = ti_ops.cast(value, anno) |
| 123 | + var = impl.expr_init(var) |
| 124 | + ctx.create_variable(target.id, var) |
| 125 | + else: |
| 126 | + var = build_stmt(ctx, target) |
| 127 | + if var.ptr.get_rvalue_type() != anno: |
| 128 | + raise TaichiSyntaxError( |
| 129 | + "Static assign cannot have type overloading" |
| 130 | + ) |
| 131 | + var._assign(value) |
120 | 132 | return var |
121 | 133 |
|
122 | 134 | @staticmethod |
|
0 commit comments