Comments (6)
Likely a bug in js_of_ocaml. Can you open an issue with details on how to reproduce.
from gen_js_api.
Ok. Done here: ocsigen/js_of_ocaml#573
from gen_js_api.
As noticed by @hhugo on ocsigen/js_of_ocaml#573 , the ml code generated by gen_js_api from val foo : int -> unit
is incorrect. With an explicit [@@js.global]
annotation, it is correct.
val foo : int -> unit
produces
let (foo : int -> unit) =
fun x1 -> ignore (Ojs.call (Ojs.int_to_js x1) "foo" [||])
while
val foo : int -> unit
[@@js.global]
produces
let (foo : int -> unit) =
fun x1 -> ignore (Ojs.call Ojs.global "foo" [|(Ojs.int_to_js x1)|])
However, if I understand https://github.com/LexiFi/gen_js_api/blob/master/VALUES.md#automatic-binding correctly, the [@@js.global]
should not be necessary and not providing it should work just the same, which is not the case currently.
from gen_js_api.
The relevant case from VALUS.md is:
If the value is a function with a single argument (named type) t -> unit, then the declaration is assumed to be a [@@js.call] method call, unless a [@js.scope] attribute has been defined in an englobing module. In this latter case, the value is assumed to be a [@@js.global] value.
Do you see something else that would contradict this interpretation?
from gen_js_api.
Ah, now I understand the paragraph you are mentionning. I think I may have been confused by "a single argument (named type) t -> unit
"; and interpreted it as "the type must literally be named t
", while, if I understand correctly, t
must be read as a meta-variable here?
Maybe this paragraph could be clarified a bit? Additionally, I don't know why, but when quickly reading through the paragraph, I seem to incorrectly interpret the last sentence as Otherwise, the value is assumed ...
, with the Otherwise
referring to the first If
. Maybe reformulating things could make the whole paragraph a bit clearer.
from gen_js_api.
I've changed this section to use greek letters for meta-variables. If you have some ideas to improve the text, don't hesitate to create a PR!
from gen_js_api.
Related Issues (20)
- calling new on a dynamic value HOT 4
- Conversion functions not included in module signature HOT 1
- js.global with payload doesn't work with js.scope HOT 1
- Change Ojs_exn to Ojs.Exn HOT 2
- Make a new release HOT 2
- [question] How to define mutually recursive types including both JS-able types and non-JS-able types (with custom `of_js` and `to_js`)?
- Codegen change for functions named "get" and "set"; was this intentional? HOT 5
- Resolve the ocaml-migrate-parsetree < "2.0.0" constraint HOT 2
- Recursive type definitions generate invalid `let-rec` definitions
- [@@js.new] can infer empty class names
- js.* attributes on val declarations fail to compile in 1.0.7 HOT 3
- Ignore @js.dummy attribute for the spuriousness check HOT 1
- Add visual feedback of executed JavaScript code HOT 1
- Contravariant type parameter 'a is not allowed
- Inherit JS class, override method and pass new class back to JS? HOT 1
- Support ad-hoc object types to map to JS objects
- Unions based on JS class name and typeof?
- "js.union without way to discriminate values" for union in callback argument type HOT 1
- Dots in js.scope HOT 3
- Using polymorphic types with `js.custom` and `js.call` gives weak polymorphism error HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from gen_js_api.