Last active
July 13, 2019 16:38
-
-
Save akbertram/d32df21e35eab1f6142a14495ec8f3b8 to your computer and use it in GitHub Desktop.
Compiling readBin
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
readBin <- function(con, what, n = 1L, size = NA_integer_, signed = TRUE, | |
endian = .Platform$endian) | |
{ | |
if(is.character(con)) { | |
con <- file(con, "rb") | |
on.exit(close(con)) | |
} | |
swap <- endian != .Platform$endian | |
if(!is.character(what) || is.na(what) || | |
length(what) != 1L || ## hence length(what) == 1: | |
!any(what == c("numeric", "double", "integer", "int", "logical", | |
"complex", "character", "raw"))) | |
what <- typeof(what) | |
.Internal(readBin(con, what, n, size, signed, swap)) | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
T1₁ ← call is.character*₀(con₀) | |
if T1₁ goto L0 else L1 | |
L0: | |
con₂ ← call file*₀(con₀, rb) | |
T2₂ ← promise(close(con)) | |
if strict(on.exit*₀) goto L3 else L2 | |
L3: | |
T2₄ ← call close*₀(con₂) | |
L2: | |
T2₃ ← Φ(T2₂, T2₄) | |
call on.exit*₀(T2₃) | |
L1: | |
T2₁ ← Φ(T2₀, T2₃) | |
con₁ ← Φ(con₀, con₂) | |
T3₁ ← .Platform₀$endian | |
swap₁ ← call !=(endian₀, T3₁) | |
T7₁ ← call is.character*₀(what₀) | |
T8₁ ← call !(T7₁) | |
if T8₁ goto L19 else L16 else na L17 | |
L16: | |
T6₅ ← FALSE | |
goto L18 | |
L17: | |
T6₇ ← NA | |
goto L18 | |
L18: | |
T6₁ ← Φ(T6₅, T6₇) | |
T9₁ ← call is.na*₀(what₀) | |
if T9₁ goto L19 else L21 else na L20 | |
L19: | |
T9₂ ← Φ(T9₀, T9₁) | |
T6₃ ← Φ(T6₀, T6₁) | |
T6₄ ← TRUE | |
goto L21 | |
L20: | |
T6₂ ← NA | |
L21: | |
T9₃ ← Φ(T9₁, T9₂, T9₁) | |
T6₆ ← Φ(T6₁, T6₄, T6₂) | |
if T6₆ goto L13 else L10 else na L11 | |
L10: | |
T5₇ ← FALSE | |
goto L12 | |
L11: | |
T5₄ ← NA | |
goto L12 | |
L12: | |
T5₅ ← Φ(T5₇, T5₄) | |
T10₃ ← call length*₀(what₀) | |
T11₃ ← call !=(T10₃, c(1L)) | |
if T11₃ goto L13 else L15 else na L14 | |
L13: | |
T11₂ ← Φ(T11₀, T11₃) | |
T10₂ ← Φ(T10₀, T10₃) | |
T5₂ ← Φ(T5₀, T5₅) | |
T5₃ ← TRUE | |
goto L15 | |
L14: | |
T5₆ ← NA | |
L15: | |
T11₁ ← Φ(T11₃, T11₂, T11₃) | |
T10₁ ← Φ(T10₃, T10₂, T10₃) | |
T5₁ ← Φ(T5₅, T5₃, T5₆) | |
if T5₁ goto L7 else L4 else na L5 | |
L4: | |
T4₃ ← FALSE | |
goto L6 | |
L5: | |
T4₅ ← NA | |
goto L6 | |
L6: | |
T4₁ ← Φ(T4₃, T4₅) | |
T12₁ ← promise(==(what, c(numeric, double, integer, int, logical, complex, character, raw))) | |
if strict(any*₀) goto L23 else L22 | |
L23: | |
T13₁ ← call c*₀(numeric, double, integer, int, logical, complex, character, raw) | |
T12₂ ← call ==(what₀, T13₁) | |
L22: | |
T13₂ ← Φ(T13₀, T13₁) | |
T12₃ ← Φ(T12₁, T12₂) | |
T14₁ ← call any*₀(T12₃) | |
T15₁ ← call !(T14₁) | |
if T15₁ goto L7 else L9 else na L8 | |
L7: | |
T15₃ ← Φ(T15₀, T15₁) | |
T14₃ ← Φ(T14₀, T14₁) | |
T13₄ ← Φ(T13₀, T13₂) | |
T12₅ ← Φ(T12₀, T12₃) | |
T4₆ ← Φ(T4₀, T4₁) | |
T4₇ ← TRUE | |
goto L9 | |
L8: | |
T4₂ ← NA | |
L9: | |
T15₂ ← Φ(T15₁, T15₃, T15₁) | |
T14₂ ← Φ(T14₁, T14₃, T14₁) | |
T13₃ ← Φ(T13₂, T13₄, T13₂) | |
T12₄ ← Φ(T12₃, T12₅, T12₃) | |
T4₄ ← Φ(T4₁, T4₇, T4₂) | |
if T4₄ goto L24 else L25 | |
L24: | |
what₁ ← call typeof*₀(what₀) | |
L25: | |
what₂ ← Φ(what₀, what₁) | |
T16₁ ← (readBin con₁ what₂ n₀ size₀ signed₀ swap₁) | |
return T16₁ | |
T16₂ ← Φ(T16₀, T16₁) | |
T15₄ ← Φ(T15₀, T15₂) | |
T14₄ ← Φ(T14₀, T14₂) | |
T13₅ ← Φ(T13₀, T13₃) | |
T12₆ ← Φ(T12₀, T12₄) | |
T11₄ ← Φ(T11₀, T11₁) | |
T10₄ ← Φ(T10₀, T10₁) | |
T9₄ ← Φ(T9₀, T9₃) | |
T8₂ ← Φ(T8₀, T8₁) | |
T7₂ ← Φ(T7₀, T7₁) | |
T6₈ ← Φ(T6₀, T6₆) | |
T5₈ ← Φ(T5₀, T5₁) | |
T4₈ ← Φ(T4₀, T4₄) | |
T3₂ ← Φ(T3₀, T3₁) | |
T2₅ ← Φ(T2₀, T2₁) | |
what₃ ← Φ(what₀, what₂) | |
swap₂ ← Φ(swap₀, swap₁) | |
T1₂ ← Φ(T1₀, T1₁) | |
con₃ ← Φ(con₀, con₁) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
T3₁ => [*] | |
T3₂ => [*] | |
file*₀ => [const function(description=, open=, blocking=TRUE, encoding=getOption(encoding), raw=FALSE, method=getOption(url.method, default))] | |
close*₀ => [const function(con=<missing_arg>, ...=<missing_arg>)] | |
readBin*₀ => [const function(con=<missing_arg>, what=<missing_arg>, n=c(1L), size=c(NA_integer_), signed=TRUE, endian=$(.Platform, endian))] | |
T16₁ => [*] | |
T16₂ => [*] | |
T12₁ => [promise] | |
T12₂ => [*] | |
T12₃ => [*] | |
T12₄ => [*] | |
T8₁ => [logical, len=1, ?NA] | |
T12₅ => [*] | |
T8₂ => [logical, len=1, ?NA] | |
T12₆ => [*] | |
T4₁ => [const FALSE] | |
T4₃ => [const FALSE] | |
T4₄ => [logical, len=1] | |
T4₆ => [const FALSE] | |
T4₇ => [const TRUE] | |
T4₈ => [logical, len=1] | |
T13₁ => [const c(numeric, double, integer, int, logical...8 elements total), names=c(NA_character_, NA_character_, NA_character_, NA_character_, NA_character_...8 elements total)] | |
T13₂ => [const c(numeric, double, integer, int, logical...8 elements total), names=c(NA_character_, NA_character_, NA_character_, NA_character_, NA_character_...8 elements total)] | |
T13₃ => [character, len>0, names?] | |
T13₄ => [const c(numeric, double, integer, int, logical...8 elements total), names=c(NA_character_, NA_character_, NA_character_, NA_character_, NA_character_...8 elements total)] | |
T9₁ => [*] | |
T13₅ => [character, len>0, names?] | |
T9₂ => [*] | |
T9₃ => [*] | |
T9₄ => [*] | |
T5₁ => [logical, len=1] | |
T5₂ => [const FALSE] | |
is.character*₀ => [const .Primitive("is.character")] | |
is.na*₀ => [const .Primitive("is.na")] | |
c*₀ => [const .Primitive("c")] | |
typeof*₀ => [const function(x=<missing_arg>)] | |
T5₃ => [const TRUE] | |
T1₁ => [logical, len=1, ?NA] | |
swap₁ => [*] | |
con₁ => [*] | |
what₁ => [*] | |
T5₅ => [const FALSE] | |
con₂ => [*] | |
what₂ => [*] | |
swap₂ => [*] | |
T1₂ => [logical, len=1, ?NA] | |
what₃ => [*] | |
con₃ => [*] | |
T5₇ => [const FALSE] | |
T5₈ => [logical, len=1] | |
T14₁ => [*] | |
T14₂ => [*] | |
T14₃ => [*] | |
T14₄ => [*] | |
T10₁ => [*] | |
T10₂ => [*] | |
T10₃ => [*] | |
T10₄ => [*] | |
T6₁ => [const FALSE] | |
T6₃ => [const FALSE] | |
T6₄ => [const TRUE] | |
T6₅ => [const FALSE] | |
T2₁ => [promise] | |
T2₂ => [promise] | |
T6₆ => [logical, len=1] | |
T2₃ => [promise] | |
T6₈ => [logical, len=1] | |
T2₅ => [promise] | |
on.exit*₀ => [const .Primitive("on.exit")] | |
T15₁ => [*] | |
T15₂ => [*] | |
T15₃ => [*] | |
T15₄ => [*] | |
T11₁ => [*] | |
T11₂ => [*] | |
any*₀ => [const .Primitive("any")] | |
T11₃ => [*] | |
T11₄ => [*] | |
T7₁ => [logical, len=1, ?NA] | |
T7₂ => [logical, len=1, ?NA] | |
length*₀ => [const .Primitive("length")] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
T1₁ ← call is.character*(con₀) | |
con ← con | |
if T1₁ goto L0 else L1 | |
L0: | |
con ← call file*(con₀, rb) | |
T2₂ ← promise(close(con)) | |
T2₃ ← T2₂ | |
goto L2 | |
L2: | |
call on.exit*(T2₃) | |
con ← con | |
L1: | |
T3₁ ← .Platform₀$endian | |
swap ← call !=(endian₀, T3₁) | |
T7₁ ← call is.character*(what₀) | |
T8₁ ← call !(T7₁) | |
if T8₁ goto L19 else L16 else na L17 | |
L16: | |
T6₅ ← FALSE | |
T6₁ ← T6₅ | |
goto L18 | |
L18: | |
T9₁ ← call is.na*(what₀) | |
T6₆ ← T6₁ | |
if T9₁ goto L19 else L21 else na L20 | |
L19: | |
T6₄ ← TRUE | |
T6₆ ← T6₄ | |
goto L21 | |
L21: | |
if T6₆ goto L13 else L10 else na L11 | |
L10: | |
T5₇ ← FALSE | |
T5₅ ← T5₇ | |
goto L12 | |
L12: | |
T10₃ ← call length*(what₀) | |
T11₃ ← call !=(T10₃, c(1L)) | |
T5₁ ← T5₅ | |
if T11₃ goto L13 else L15 else na L14 | |
L13: | |
T5₃ ← TRUE | |
T5₁ ← T5₃ | |
goto L15 | |
L15: | |
if T5₁ goto L7 else L4 else na L5 | |
L4: | |
T4₃ ← FALSE | |
T4₁ ← T4₃ | |
goto L6 | |
L6: | |
T12₃ ← T12₁ | |
goto L23 | |
L23: | |
T12₂ ← call ==(what₀, c(numeric, double, integer, int, logical...8 elements total)) | |
T12₃ ← T12₂ | |
L22: | |
T14₁ ← call any*(T12₃) | |
T15₁ ← call !(T14₁) | |
T4₄ ← T4₁ | |
if T15₁ goto L7 else L9 else na L8 | |
L7: | |
T4₇ ← TRUE | |
T4₄ ← T4₇ | |
goto L9 | |
L9: | |
what ← what | |
if T4₄ goto L24 else L25 | |
L24: | |
what ← call typeof*(what₀) | |
what ← what | |
L25: | |
T16₁ ← (readBin con₁ what₂ n₀ size₀ signed₀ swap₁) | |
return T16₁ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment