readme tweaks

This commit is contained in:
Kevin Leung
2017-09-21 15:02:16 +08:00
committed by GitHub
parent 209847e5ea
commit 4457ea7dee

View File

@@ -15,34 +15,34 @@ As Haxe evolved and some of the functionality has been integrated/reimplemented/
The library is build on top of the haxe macro API and `tink_core`, having three major parts:
<!-- START INDEX -->
- [Macro API](#macro-api)
-
- [Expression Tools](#expression-tools)
- [Basic Helpers](#basic-helpers)
- [Extracting Constants](#extracting-constants)
- [Shortcuts](#shortcuts)
- [Type Inspection](#type-inspection)
- [Advanced Transformations](#advanced-transformations)
- [Position Tools](#position-tools)
- [Type Tools](#type-tools)
- [Function Tools](#function-tools)
- [Operation Tools](#operation-tools)
- [Metadata Tools](#metadata-tools)
- [Build Infrastructure](#build-infrastructure)
- [Member](#member)
- [ClassBuilder](#classbuilder)
- [Constructor](#constructor)
- [Creation](#creation)
- [Visibility](#visibility)
- [Initial Super Call](#initial-super-call)
- [Simple Modifications](#simple-modifications)
- [Field Initialization](#field-initialization)
- [Setter Bypass](#setter-bypass)
- [Initialization Options](#initialization-options)
- [Expression Level Transformation](#expression-level-transformation)
- [TypeMap](#typemap)
<!-- START INDEX -->
- [Macro API](#macro-api)
-
- [Expression Tools](#expression-tools)
- [Basic Helpers](#basic-helpers)
- [Extracting Constants](#extracting-constants)
- [Shortcuts](#shortcuts)
- [Type Inspection](#type-inspection)
- [Advanced Transformations](#advanced-transformations)
- [Position Tools](#position-tools)
- [Type Tools](#type-tools)
- [Function Tools](#function-tools)
- [Operation Tools](#operation-tools)
- [Metadata Tools](#metadata-tools)
- [Build Infrastructure](#build-infrastructure)
- [Member](#member)
- [ClassBuilder](#classbuilder)
- [Constructor](#constructor)
- [Creation](#creation)
- [Visibility](#visibility)
- [Initial Super Call](#initial-super-call)
- [Simple Modifications](#simple-modifications)
- [Field Initialization](#field-initialization)
- [Setter Bypass](#setter-bypass)
- [Initialization Options](#initialization-options)
- [Expression Level Transformation](#expression-level-transformation)
- [TypeMap](#typemap)
<!-- END INDEX -->
# Macro API
@@ -303,7 +303,7 @@ abstract Member from Field to Field {
Most of the API should be self-explaining. The `isBound` property is a bad name to convey the concept that a field can be either `inline` (`true`) or `dynamic` (`false`) or neither (`null`). Equally, `isPublic` is nullable which means that normally defaults to `private`.
The `publish` method will make a field `public` if it is not `private`. This can also be done with `if (m.isPublic == null) m.isPublic = true;` but the implementation is far more efficient - for what its worth.
The `publish` method will make a field `public` if it is not explicitly marked as `private`. This can also be done with `if (m.isPublic == null) m.isPublic = true;` but the implementation is far more efficient - for what its worth.
The `extractMeta` method will "peel of" the first tag with a given `name` - if available. Note that the tag will be removed from the member.
@@ -391,7 +391,7 @@ The `init` method is the swiss army knife of initializing fields. The `options.p
#### Setter Bypass
It is important to know that when you initialize a field with `options.bypass` set to true, existing setters will by bypassed. That's particularly helpful if your setter triggers a side effect that you don't want triggered. This is achieved by generating the assignment as `(untyped this).$name = $value`. To make the code typesafe again, this is prefixed with `if (false) { var __tmp = this.$name; __tmp = $value; }`. This code is later thrown out by the compiler. Its role is to ensure type safety without interfering with the normal typing order.
It is important to know that when you initialize a field with `options.bypass` set to true, existing setters will be bypassed. That's particularly helpful if your setter triggers a side effect that you don't want triggered. This is achieved by generating the assignment as `(untyped this).$name = $value`. To make the code typesafe again, this is prefixed with `if (false) { var __tmp = this.$name; __tmp = $value; }`. This code is later thrown out by the compiler. Its role is to ensure type safety without interfering with the normal typing order.
Setter bypass also causes the field to gain an `@:isVar`. And currently, with `-dce full`, additional code will be generated to avoid the field to be eliminated.